'''作业
- 实现斐波那契函数(for循环, while循环)
- 如果遇到可以转换为`int`类型的参数, 则转换, 否则抛出自定义异常`ParamsTypeError`
'''


# (1) 斐波纳契数列指的是这样一个数列：1、1、2、3、5、8、13、21、34、……
# 在数学上，斐波纳契数列以如下被以递归的方法定义：F(1)=1，F(2)=1, F(n)=F(n-1)+F(n-2)（n>=2，n∈N*）
# 即我们要创建一个函数fib, fib(1) = 1 , fib(2) = 1 , fib(3) = 2, fib(4) = 3, ...
def fib(n):
    if n == 1 or n == 2:
        return 1
    else:
        a = 0
        b = 1
        while n > 0:
            t = b
            b = a + b
            a = t
            n = n - 1
        return a


def fib2(n):
    if n == 1 or n == 2:
        return 1
    else:
        a = 0
        b = 1
        for _ in range(n):
            t = b
            b = a + b
            a = t
            n = n - 1
        return a


# （2）自定义异常
class ParamsTypeError(Exception):

    pass


def func(n):
    try:
        n = int(n)
    except:
        raise ParamsTypeError('参数非整型')
    print(n)


func("a")
